package pda.agenda;

import pda.agenda.Agenda;

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JInternalFrame;
import javax.swing.ImageIcon;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JFormattedTextField;
import javax.swing.JCheckBox;
import javax.swing.BorderFactory;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Toolkit;

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Date;

import java.text.SimpleDateFormat;
import java.text.NumberFormat;






public class AgendaView {


//###########################################################################################
//							Gestion de la date
//###########################################################################################

	//=======================================================================================changeAddDay
	public void changeAddDay(){
		//recupere le mois 
		String[] tmp = dateChoosenLbl.split(" ")[1].split("/");// xx/xx/xxxx

		int month = Integer.parseInt(tmp[1]);
		
		if (  (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10) && ( Integer.parseInt(tmp[0])%31 == 0)){
			tmp[0] = String.valueOf(1);
			tmp[1] = String.valueOf(Integer.parseInt(tmp[1])+1);
		}else if ( (month == 4 || month == 6 || month == 9 || month == 11)  && ( Integer.parseInt(tmp[0])%30 == 0)){//changement de mois
			tmp[0] = String.valueOf(1);
			tmp[1] = String.valueOf(Integer.parseInt(tmp[1])+1);
		} else if (month == 12 && Integer.parseInt(tmp[0])%31 == 0){//changement d'annee
			tmp[0] = String.valueOf(1) ;
			tmp[1] = String.valueOf(1) ;
			tmp[2] = String.valueOf(Integer.parseInt(tmp[2])+1);
		} else if (month == 2 && (new GregorianCalendar().isLeapYear(Integer.parseInt(tmp[2]))) && Integer.parseInt(tmp[0])%29 == 0){
			tmp[0] = String.valueOf(1) ;
			tmp[1] = String.valueOf(3) ;
		}else if (month == 2 && !(new GregorianCalendar().isLeapYear(Integer.parseInt(tmp[2]))) && Integer.parseInt(tmp[0])%28 == 0){
			tmp[0] = String.valueOf(1) ;
			tmp[1] = String.valueOf(3) ;
		}else {
			tmp[0] = String.valueOf(Integer.parseInt(tmp[0])+1);
		}
		
		int dayOf = (new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(tmp[1])-1,Integer.parseInt(tmp[0])).get(Calendar.DAY_OF_WEEK));
		
		//enregistre la modification dans la variable de date selectionne
		dateChoosenLbl = dayName[dayOf]+" "+tmp[0]+"/"+tmp[1]+"/"+tmp[2];
		//init Home pour actualiser la date afficher
		dateChoosen.setText(dateChoosenLbl);
				
	}
	
	//=======================================================================================changeSubDay
	public void changeSubDay(){
				//recupere le mois 
		String[] tmpp = dateChoosenLbl.split(" ");
		String[] tmp = tmpp[1].split("/");// xx/xx/xxxx
		String day = "";

		int month = Integer.parseInt(tmp[1]);

		
		if (  (month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && ( Integer.parseInt(tmp[0])-1 == 0)){
			tmp[0] = String.valueOf(30);
			tmp[1] = String.valueOf(Integer.parseInt(tmp[1])-1);
			
		}else if ( (month == 2 || month == 4 || month == 6 || month == 9 || month == 11 ) && ( Integer.parseInt(tmp[0])-1 == 0)){//changement de mois
			tmp[0] = String.valueOf(31);
			tmp[1] = String.valueOf(Integer.parseInt(tmp[1])-1);
		} else if (month == 1 && Integer.parseInt(tmp[0])-1 == 0){//changement d'annee
			tmp[0] = String.valueOf(31) ;
			tmp[1] = String.valueOf(12) ;
			tmp[2] = String.valueOf(Integer.parseInt(tmp[2])-1);
		}else if (month == 3 && (new GregorianCalendar().isLeapYear(Integer.parseInt(tmp[2]))) && Integer.parseInt(tmp[0])-1 == 0){
			tmp[0] = String.valueOf(29) ;
			tmp[1] = String.valueOf(2) ;
		}else if (month == 3 && !(new GregorianCalendar().isLeapYear(Integer.parseInt(tmp[2]))) && Integer.parseInt(tmp[0])-1 == 0){
			tmp[0] = String.valueOf(28) ;
			tmp[1] = String.valueOf(2) ;
		}else {
			tmp[0] = String.valueOf(Integer.parseInt(tmp[0])-1);
		}

		int dayOf = (new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(tmp[1])-1,Integer.parseInt(tmp[0])).get(Calendar.DAY_OF_WEEK));
		//enregistre la modification dans la variable de date selectionne
		dateChoosenLbl = dayName[dayOf]+" "+tmp[0]+"/"+tmp[1]+"/"+tmp[2];
		//init Home pour actualiser la date afficher
		
	dateChoosen.setText(dateChoosenLbl);
	}		
	
	//=======================================================================================changeAddMonth
	public void changeAddMonth(){
		//recupere le mois 
		String[] tmp = dateChoosenLbl.split("/");
		String[] tmp2 = tmp[0].split(" ");
		String month = "";
		//ajoute 1 a la valeur du moi 
		int val = Integer.parseInt(tmp[1])+1;
		//une année ne compte que 12 mois donc ajout d'une année et retour a 0 si depassement
		//sinon mois + 1 
		if ( (val%13) == 0){
			month = "1";
			tmp[2] = String.valueOf(Integer.parseInt(tmp[2])+1);
		}else{
			month = String.valueOf(val);
		}
		
		GregorianCalendar calendar = new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(month)-1,Integer.parseInt(tmp2[1]));
		
		int numberOfDayInMonth = (month == "1" || month == "3" || month == "5" || month == "7" || month == "8" || month == "10" || month == "12")?31:(month == "2" && calendar.isLeapYear(Integer.parseInt(tmp[2])))?29 : (month == "2" && !calendar.isLeapYear(Integer.parseInt(tmp[2])))?28:30;
		
		if( Integer.parseInt(tmp2[1]) > numberOfDayInMonth){
				tmp2[1] = String.valueOf(numberOfDayInMonth);
		}
		
		int dayOf = ( new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(month)-1,Integer.parseInt(tmp2[1])).get(Calendar.DAY_OF_WEEK));
	//enregistre la modification dans la variable de date selectionne
		dateChoosenLbl = dayName[dayOf]+" "+tmp2[1]+"/"+month+"/"+tmp[2];
		//init Home pour actualiser la date afficher
		
		this.initHome();		
	}
	
	//=======================================================================================changeSubMonth
	public void changeSubMonth(){
		//commentaire cf changeAddMonth
		String[] tmp = dateChoosenLbl.split("/");
		String[] tmpp = tmp[0].split(" ");
		String month = "";
		int val = Integer.parseInt(tmp[1])-1;
		if ( val == 0){
			month = "12";
			tmp[2] = String.valueOf(Integer.parseInt(tmp[2])-1);
		}else{
			month = String.valueOf(val);
		}
		
		GregorianCalendar calendar = new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(month)-1,Integer.parseInt(tmpp[1]));
		
		int numberOfDayInMonth = (month == "1" || month == "3" || month == "5" || month == "7" || month == "8" || month == "10" || month == "12")?31:(month == "2" && calendar.isLeapYear(Integer.parseInt(tmp[2])))?29 : (month == "2" && !calendar.isLeapYear(Integer.parseInt(tmp[2])))?28:30;
		
		if( Integer.parseInt(tmpp[1]) > numberOfDayInMonth){
				tmpp[1] = String.valueOf(numberOfDayInMonth);
		}
		
		int dayOf = (new GregorianCalendar(Integer.parseInt(tmp[2]),Integer.parseInt(month),Integer.parseInt(tmpp[1])).get(Calendar.DAY_OF_WEEK));
	//enregistre la modification dans la variable de date selectionne
		dateChoosenLbl = dayName[dayOf-1]+" "+tmpp[1]+"/"+month+"/"+tmp[2];
		this.initHome();
	}
	

	
//###########################################################################################
//							Gestion Panneau d'activité
//###########################################################################################
	
	//=======================================================================================initInternalFrame
	public void initInternalFrame(){
		
		
		JInternalFrame frame = new JInternalFrame("Details",false,true,false,false);
		textPane.removeAll();
		textPane.add(frame);
		
		JPanel contactPanel = new JPanel();
		contactPanel.setBackground(Color.black);
		
		contactPanel.setLayout( new BorderLayout());
		JPanel liste = new JPanel();
		
		
		JList theList = new JList(new SortedModel());
		JScrollPane listeContact = new JScrollPane(theList);
		liste.add(listeContact);
		listeContact.setPreferredSize(new Dimension(20,20));
		contactPanel.add(listeContact, BorderLayout.WEST);
		frame.add(contactPanel);
		
		JButton add = new JButton(new ImageIcon("data/img/agenda/add.png"));
		JButton del = new JButton(new ImageIcon("data/img/agenda/del.png"));
		JButton edit = new JButton(new ImageIcon("data/img/agenda/edit.png"));
		
		JPanel fun = new JPanel();
		fun.add(add);
		fun.add(del);
		fun.add(edit);
		fun.setPreferredSize(new Dimension(40,0));
		contactPanel.add(fun, BorderLayout.EAST);
		
		JPanel button = new JPanel();
		JButton ok = new JButton("Ok");
		JButton notOk = new JButton("Annuler");
		button.add(ok);
		button.add(notOk);
		
		button.setPreferredSize(new Dimension(0,28));
		contactPanel.add(button,BorderLayout.SOUTH);
		
		
		frame.setVisible(true);


		/*JPanel detailPanel = new JPanel();
		frame.add(detailPanel);
		detailPanel.setBackground(Color.black);
		site = new JTextField(15);
		duree = new JTextField(4);
		JLabel dureeLbl = new JLabel("Durée : ");
		JLabel dureeLbl2 = new JLabel("jour(s)");
		JLabel siteLbl = new JLabel("Site web :");
		detailPanel.add(siteLbl);
		detailPanel.add(site);
		detailPanel.add(dureeLbl);
		detailPanel.add(duree);
		detailPanel.add(dureeLbl2);*/
		
	}
	
	//=======================================================================================chooseDateAct
	private void chooseDateAct(){
		// mise en place du changement de date par fleche
		main.removeAll();
		moveDate = new JPanel();
		main.add(moveDate, BorderLayout.NORTH);
		dateChoosen.setText(dateChoosenLbl);
		prevD = new JButton(new ImageIcon("data/img/agenda/prev.png"));
		nextD = new JButton(new ImageIcon("data/img/agenda/next.png"));
		
		
		moveDate.setPreferredSize(new Dimension(0,20));
		moveDate.setLayout(new BorderLayout());
		moveDate.add(prevD,BorderLayout.WEST);
		moveDate.add(dateChoosen,BorderLayout.CENTER);
		moveDate.add(nextD,BorderLayout.EAST);
		moveDate.setBackground(Color.black);
		
		prevD.setBackground(Color.black);
		prevD.addActionListener(controller);
		prevD.setActionCommand("prevDay");
		prevD.setPreferredSize(new Dimension(25,0));
		
		nextD.setBackground(Color.black);
		nextD.addActionListener(controller);
		nextD.setActionCommand("nextDay");
		nextD.setPreferredSize(new Dimension(25,0));
		
		
		dateChoosen.setBackground(Color.black);
		dateChoosen.setForeground(Color.white);
		dateChoosen.setHorizontalAlignment(SwingConstants.CENTER);
	}

	//=======================================================================================setPanelCourse
	public void setPanelCourse(){
		
		this.viewPanelActivity();
		typeActivityLbl.setText("Nouveau cours");
				//************************************************ Init des elements necessaire ou l'on peut recuperer les données
			motif = new JTextArea(3,15);
			debH = new LimitedTextField(2);
			debM = new LimitedTextField(2);
			finH = new LimitedTextField(2);
			finM = new LimitedTextField(2);
			jour = new JCheckBox("Tous les jours");
			semaine = new JCheckBox("Toute les semaines");
			validate = new JButton("Valider");
			cancel = new JButton("Annuler");
			prof = new JTextField(15);
			mati = new JTextField(15);
			lieu = new JTextField(15);
		//************************************************ creation des label pas forcement utils et panel de mise en place
			JLabel motifLbl = new JLabel("Motif :");
			JLabel debLbl = new JLabel("Début :");
			JLabel finLbl = new JLabel("<html> 	Fin : &nbsp;  &nbsp; &nbsp; </html>");
			JLabel repetLbl = new JLabel("<html><div style=\"margin-left:12px;\">Répétition :</div></html>");
			JLabel sep1 = new JLabel(":");
			JLabel sep2 = new JLabel(":");

		
			JLabel lieuLbl = new JLabel("<html>Lieu :&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  </html>");
			JLabel profLbl = new JLabel("Professeur :");
			JLabel matiLbl = new JLabel("<html>Matière :&nbsp; &nbsp; &nbsp; &nbsp;</html>");
			
			JPanel motifPanel = new JPanel();
			JPanel horairePanel = new JPanel();
			JPanel repetPanel = new JPanel();
			
			JPanel bouttonPanel = new JPanel();
			JPanel heurePanel = new JPanel();
			JPanel profPanel = new JPanel();
			JPanel lieuPanel = new JPanel();
			JPanel matiPanel = new JPanel();
			JPanel contentPanel = new JPanel();
			
		//************************************************mise en place
			textPane.setLayout(new BorderLayout());
			contentPanel.setLayout(new GridLayout(6,1));
			textPane.add(motifPanel,BorderLayout.NORTH);
			textPane.add(contentPanel,BorderLayout.CENTER);
			textPane.add(bouttonPanel,BorderLayout.SOUTH);
			
			contentPanel.add(heurePanel);
			contentPanel.add(horairePanel);
			contentPanel.add(lieuPanel);
			contentPanel.add(profPanel);
			contentPanel.add(matiPanel);		
			contentPanel.add(repetPanel);
			// contentPanel.add(bouttonPanel);

				motifPanel.add(motifLbl);
				motifPanel.add(motif);
				
				heurePanel.add(debLbl,FlowLayout.LEFT);
				heurePanel.add(debH);
				heurePanel.add(sep1);
				heurePanel.add(debM);
				
				horairePanel.add(finLbl,FlowLayout.LEFT);
				horairePanel.add(finH);
				horairePanel.add(sep2);
				horairePanel.add(finM);
				
				lieuPanel.add(lieuLbl);
				lieuPanel.add(lieu);
				
				profPanel.add(profLbl);
				profPanel.add(prof);
				
				matiPanel.add(matiLbl);
				matiPanel.add(mati);
				
				repetPanel.add(jour);
				repetPanel.add(semaine);
				
				bouttonPanel.add(validate);
				bouttonPanel.add(cancel);
		
		//************************************************mise en forme
			textPane.setBackground(Color.black);
			textPane.setForeground(Color.white);
			
			contentPanel.setBackground(Color.black);
			
			motifPanel.setBackground(Color.black);
			motifLbl.setForeground(Color.white);
			
			heurePanel.setBackground(Color.black);
			horairePanel.setBackground(Color.black);
			finLbl.setForeground(Color.white);
			debLbl.setForeground(Color.white);
			sep1.setForeground(Color.white);
			sep2.setForeground(Color.white);
			
			lieuPanel.setBackground(Color.black);
			profPanel.setBackground(Color.black);
			matiPanel.setBackground(Color.black);
			profLbl.setForeground(Color.white);
			lieuLbl.setForeground(Color.white);
			matiLbl.setForeground(Color.white);
			
			repetPanel.setBackground(Color.black);
			repetLbl.setForeground(Color.white);
			jour.setBackground(Color.black);
			semaine.setBackground(Color.black);
			jour.setForeground(Color.white);
			semaine.setForeground(Color.white);
			
			bouttonPanel.setBackground(Color.black);
			
			validate.addActionListener(controller);
			cancel.addActionListener(controller);
			cancel.setActionCommand("retour");
			validate.setActionCommand("validCours");
			
		//************************************************rafraichissement
		
		main.repaint();
		main.validate();
	}
	
	//=======================================================================================setPanelRdv	
	public void setPanelRdv(){
	
		this.viewPanelActivity();
		typeActivityLbl.setText("Nouveau rendez-vous");
		
						//************************************************ Init des elements necessaire ou l'on peut recuperer les données
			motif = new JTextArea(3,15);
			debH = new LimitedTextField(2);
			debM = new LimitedTextField(2);
			finH = new LimitedTextField(2);
			finM = new LimitedTextField(2);
			jour = new JCheckBox("Tous les jours");
			semaine = new JCheckBox("Toute les semaines");
			validate = new JButton("Valider");
			cancel = new JButton("Annuler");
			list = new JTextField(15);
			lieu = new JTextField(15);
		//************************************************ creation des label pas forcement utils et panel de mise en place
			JLabel motifLbl = new JLabel("Motif :");
			JLabel debLbl = new JLabel("Début :");
			JLabel finLbl = new JLabel("<html> 	Fin : &nbsp;  &nbsp; &nbsp; </html>");
			JLabel repetLbl = new JLabel("<html><div style=\"margin-left:12px;\">Répétition :</div></html>");
			JLabel sep1 = new JLabel(":");
			JLabel sep2 = new JLabel(":");

		
			JLabel lieuLbl = new JLabel("<html>Lieu :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  </html>");
			JLabel listLbl = new JLabel("<html>Invité :&nbsp; &nbsp; &nbsp; &nbsp;</html>");
			
			JPanel motifPanel = new JPanel();
			JPanel horairePanel = new JPanel();
			JPanel repetPanel = new JPanel();
			
			JPanel bouttonPanel = new JPanel();
			JPanel heurePanel = new JPanel();
			JPanel lieuPanel = new JPanel();
			JPanel listPanel = new JPanel();
			JPanel contentPanel = new JPanel();
			
		//************************************************mise en place
			textPane.setLayout(new BorderLayout());
			contentPanel.setLayout(new GridLayout(5,1));
			textPane.add(motifPanel,BorderLayout.NORTH);
			textPane.add(contentPanel,BorderLayout.CENTER);
			textPane.add(bouttonPanel,BorderLayout.SOUTH);
			contentPanel.add(heurePanel);
			contentPanel.add(horairePanel);
			contentPanel.add(lieuPanel);
			contentPanel.add(listPanel);		
			contentPanel.add(repetPanel);
			// contentPanel.add(bouttonPanel);

				motifPanel.add(motifLbl);
				motifPanel.add(motif);
				
				heurePanel.add(debLbl,FlowLayout.LEFT);
				heurePanel.add(debH);
				heurePanel.add(sep1);
				heurePanel.add(debM);
				
				horairePanel.add(finLbl,FlowLayout.LEFT);
				horairePanel.add(finH);
				horairePanel.add(sep2);
				horairePanel.add(finM);
				
				lieuPanel.add(lieuLbl);
				lieuPanel.add(lieu);
				
				listPanel.add(listLbl);
				listPanel.add(list);
				
				repetPanel.add(jour);
				repetPanel.add(semaine);
				
				bouttonPanel.add(validate);
				bouttonPanel.add(cancel);
		
		//************************************************mise en forme
			textPane.setBackground(Color.black);
			textPane.setForeground(Color.white);
			
			contentPanel.setBackground(Color.black);
			
			motifPanel.setBackground(Color.black);
			motifLbl.setForeground(Color.white);
			
			heurePanel.setBackground(Color.black);
			horairePanel.setBackground(Color.black);
			finLbl.setForeground(Color.white);
			debLbl.setForeground(Color.white);
			sep1.setForeground(Color.white);
			sep2.setForeground(Color.white);
			
			lieuPanel.setBackground(Color.black);
			listPanel.setBackground(Color.black);
			lieuLbl.setForeground(Color.white);
			listLbl.setForeground(Color.white);
			
			repetPanel.setBackground(Color.black);
			repetLbl.setForeground(Color.white);
			jour.setBackground(Color.black);
			semaine.setBackground(Color.black);
			jour.setForeground(Color.white);
			semaine.setForeground(Color.white);
			
			bouttonPanel.setBackground(Color.black);
			
			validate.addActionListener(controller);
			cancel.addActionListener(controller);
			cancel.setActionCommand("retour");
			validate.setActionCommand("validRDV");
			
		//************************************************rafraichissement
		main.repaint();
		main.validate();
	}
	
	//=======================================================================================setPanelMeeting
	public void setPanelMeeting(){
		
		this.viewPanelActivity();
		typeActivityLbl.setText("Nouvelle réunion");
						
		//************************************************ Init des elements necessaire ou l'on peut recuperer les données
			motif = new JTextArea(3,15);
			debH = new LimitedTextField(2);
			debM = new LimitedTextField(2);
			finH = new LimitedTextField(2);
			finM = new LimitedTextField(2);
			jour = new JCheckBox("Tous les jours");
			semaine = new JCheckBox("Toute les semaines");
			validate = new JButton("Valider");
			cancel = new JButton("Annuler");
			details = new JButton("Détails");
			lieu = new JTextField(15);
			init = new JTextField(15);
			invi = new JTextField(15);
		//************************************************ creation des label pas forcement utils et panel de mise en place
			JLabel motifLbl = new JLabel("Motif :");
			JLabel debLbl = new JLabel("Début :");
			JLabel finLbl = new JLabel("<html> 	Fin : &nbsp; &nbsp; &nbsp; </html>");
			JLabel repetLbl = new JLabel("<html><div style=\"margin-left:12px;\">Repetition :</div></html>");
			JLabel sep1 = new JLabel(":");
			JLabel sep2 = new JLabel(":");

		
			JLabel lieuLbl = new JLabel("<html>Lieu :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  </html>");
			JLabel initLbl = new JLabel("Initiateur :");
			JLabel inviLbl = new JLabel("<html>Invité :&nbsp; &nbsp; &nbsp; &nbsp;</html>");
			
			JPanel motifPanel = new JPanel();
			JPanel horairePanel = new JPanel();
			JPanel repetPanel = new JPanel();
			
			JPanel bouttonPanel = new JPanel();
			JPanel heurePanel = new JPanel();
			JPanel initPanel = new JPanel();
			JPanel lieuPanel = new JPanel();
			JPanel inviPanel = new JPanel();
			JPanel contentPanel = new JPanel();
			
		//************************************************mise en place
			textPane.setLayout(new BorderLayout());
			contentPanel.setLayout(new GridLayout(6,1));
			textPane.add(motifPanel,BorderLayout.NORTH);
			textPane.add(contentPanel,BorderLayout.CENTER);
			textPane.add(bouttonPanel,BorderLayout.SOUTH);
			
			contentPanel.add(heurePanel);
			contentPanel.add(horairePanel);
			contentPanel.add(lieuPanel);
			contentPanel.add(initPanel);
			contentPanel.add(inviPanel);		
			contentPanel.add(repetPanel);
			// contentPanel.add(bouttonPanel);

				motifPanel.add(motifLbl);
				motifPanel.add(motif);
				
				heurePanel.add(debLbl,FlowLayout.LEFT);
				heurePanel.add(debH);
				heurePanel.add(sep1);
				heurePanel.add(debM);
				
				horairePanel.add(finLbl,FlowLayout.LEFT);
				horairePanel.add(finH);
				horairePanel.add(sep2);
				horairePanel.add(finM);
				
				lieuPanel.add(lieuLbl);
				lieuPanel.add(lieu);
				
				initPanel.add(initLbl);
				initPanel.add(init);
				
				inviPanel.add(inviLbl);
				inviPanel.add(invi);
				
				repetPanel.add(jour);
				repetPanel.add(semaine);
				
				bouttonPanel.add(details);
				bouttonPanel.add(validate);
				bouttonPanel.add(cancel);
		
		//************************************************mise en forme
			textPane.setBackground(Color.black);
			textPane.setForeground(Color.white);
			
			contentPanel.setBackground(Color.black);
			
			motifPanel.setBackground(Color.black);
			motifLbl.setForeground(Color.white);
			
			heurePanel.setBackground(Color.black);
			horairePanel.setBackground(Color.black);
			finLbl.setForeground(Color.white);
			debLbl.setForeground(Color.white);
			sep1.setForeground(Color.white);
			sep2.setForeground(Color.white);
			
			lieuPanel.setBackground(Color.black);
			initPanel.setBackground(Color.black);
			inviPanel.setBackground(Color.black);
			initLbl.setForeground(Color.white);
			lieuLbl.setForeground(Color.white);
			inviLbl.setForeground(Color.white);
			
			repetPanel.setBackground(Color.black);
			repetLbl.setForeground(Color.white);
			jour.setBackground(Color.black);
			semaine.setBackground(Color.black);
			jour.setForeground(Color.white);
			semaine.setForeground(Color.white);
			
			bouttonPanel.setBackground(Color.black);
			
			invi.addMouseListener(controller);
			validate.addActionListener(controller);
			details.addActionListener(controller);
			cancel.addActionListener(controller);
			cancel.setActionCommand("retour");
			validate.setActionCommand("validReunion");
			
		//************************************************rafraichissement
		main.repaint();
		main.validate();
	}
	
	//=======================================================================================setPanelActivity
	public void setPanelActivity(){
		this.viewPanelActivity();
		typeActivityLbl.setText("Nouvelle activitée");
		//************************************************ Init des elements necessaire ou l'on peut recuperer les données
			motif = new JTextArea(3,15);
			debH = new LimitedTextField(2);
			debM = new LimitedTextField(2);
			finH = new LimitedTextField(2);
			finM = new LimitedTextField(2);
			jour = new JCheckBox("Tous les jours");
			semaine = new JCheckBox("Toute les semaines");
			validate = new JButton("Valider");
			cancel = new JButton("Annuler");
		//************************************************ creation des label pas forcement utils et panel de mise en place
			JLabel motifLbl = new JLabel("Motif :");
			JLabel debLbl = new JLabel("Début :");
			JLabel finLbl = new JLabel("<html> 	Fin : &nbsp; &nbsp; </html>");
			JLabel repetLbl = new JLabel("<html><div style=\"margin-left:12px;\">Repetition :</div></html>");
			JLabel sep1 = new JLabel(":");
			JLabel sep2 = new JLabel(":");
		
			JPanel motifPanel = new JPanel();
			JPanel horairePanel = new JPanel();
			JPanel repetitionPanel = new JPanel();
			JPanel bouttonPanel = new JPanel();
			JPanel repetPanel = new JPanel();
			JPanel heurePanel = new JPanel();
			
		//************************************************mise en place
			textPane.setLayout(new GridLayout(5,1));
			textPane.add(motifPanel);
			textPane.add(heurePanel);
			textPane.add(horairePanel);
			textPane.add(repetitionPanel);
			textPane.add(bouttonPanel);
			
			motifPanel.add(motifLbl);
			motifPanel.add(motif);
			
			heurePanel.add(debLbl,FlowLayout.LEFT);
			heurePanel.add(debH);
			heurePanel.add(sep1);
			heurePanel.add(debM);
			
			horairePanel.add(finLbl,FlowLayout.LEFT);
			horairePanel.add(finH);
			horairePanel.add(sep2);
			horairePanel.add(finM);
			
			repetitionPanel.setLayout(new BorderLayout());
			repetitionPanel.add(repetLbl,BorderLayout.NORTH);
			repetitionPanel.add(repetPanel,BorderLayout.CENTER);
			
			repetPanel.add(jour);
			repetPanel.add(semaine);
			bouttonPanel.add(validate);
			bouttonPanel.add(cancel);
		
		//************************************************mise en forme
			textPane.setBackground(Color.black);
			textPane.setForeground(Color.white);
			
			motifPanel.setBackground(Color.black);
			motifLbl.setForeground(Color.white);
			
			heurePanel.setBackground(Color.black);
			horairePanel.setBackground(Color.black);
			finLbl.setForeground(Color.white);
			debLbl.setForeground(Color.white);
			sep1.setForeground(Color.white);
			sep2.setForeground(Color.white);
			
			repetitionPanel.setBackground(Color.black);
			repetLbl.setForeground(Color.white);
			repetPanel.setBackground(Color.black);
			jour.setBackground(Color.black);
			semaine.setBackground(Color.black);
			jour.setForeground(Color.white);
			semaine.setForeground(Color.white);
			
			bouttonPanel.setBackground(Color.black);
			
			validate.addActionListener(controller);
			cancel.addActionListener(controller);
			cancel.setActionCommand("retour");
			validate.setActionCommand("validActivite");
		//************************************************rafraichissement

		main.repaint();
		main.validate();
	}
	
	//=======================================================================================viewPanelActivity
	public void viewPanelActivity(){
		main.removeAll();
		//ajout du changeur de date
		this.chooseDateAct();
		
		addAct.setEnabled(false);
		//ajout du panneau principal pour ajouter l'activitee
		panelAct = new JPanel();
		panelAct.setBackground(Color.black);
		panelAct.setForeground(Color.white);
		panelAct.setLayout(new BorderLayout());
		
		//ajout du titre de la page 
		typeActivityLbl = new JLabel("Nouvelle activitée");
		typeActivityLbl.setForeground(Color.white);
		typeActivityLbl.setFont(new Font("Arial", Font.BOLD, 20));
		typeActivityLbl.setHorizontalAlignment(SwingConstants.CENTER);
		typeActivityLbl.setPreferredSize(new Dimension(0,30));
		
		panelAct.add(typeActivityLbl, BorderLayout.NORTH);
		
		//ajout du panneau contenant les champs
		textPane = new JPanel();
		
		main.add(panelAct,BorderLayout.CENTER);
		panelAct.add(textPane, BorderLayout.CENTER);
		
		textPane.setBackground(Color.black);
		textPane.setForeground(Color.white);
		
		retour.setEnabled(true);
	}

	
//###########################################################################################
//							Gestion des panneaux du Home
//###########################################################################################

	//=======================================================================================initHome
	public void initHome(){
		//initialise le principaux composant de l'ihm et les places
		panel.removeAll();
		panel.setBackground(Color.black);
		panel.setLayout(new BorderLayout());
		main = new JPanel();
		panel.add(main, BorderLayout.CENTER);
		main.setLayout(new BorderLayout());

		//appel des methodes d'initialisation
		this.initOptionBar("home"); //la bar tout en bas parametre pour empecher certains menu ou en ajouter d'autre en fonction de la page
		this.initHomeTaskBar();	//la bar avec image pour ajouter evenement
		this.initHomeDateChooser(); //laffichage de la date et des curseurs tout en haur
		this.initHomeDisplay(typeDisplay);//affiche le calendrier en mois ou semaine selon le parametre
		this.initEntrySelect(); // affiche les evt du jour si existant
		main.repaint();
		main.validate();
	}
	//=======================================================================================initHomeTaskBar
	/**
	*this method add the bar with different activity to add on the agenda
	*
	*/
	private void initHomeTaskBar(){	
		taskBar = new JPanel();
		main.add(taskBar, BorderLayout.SOUTH);
		//mise en place de la bar de tache
		taskBar.setPreferredSize (new Dimension (0, 27));
		taskBar.setBackground(Color.black);
		taskBar.setLayout(new GridLayout(1,0));
		
		meeting = new JButton(new ImageIcon("data/img/agenda/meeting.png"));
		course = new JButton(new ImageIcon("data/img/agenda/entry.png"));
		rdv = new JButton(new ImageIcon("data/img/agenda/task.png"));
		
		taskBar.add(meeting);
		taskBar.add(course);
		taskBar.add(rdv);
		
		meeting.setBackground(Color.black);
		meeting.addActionListener(controller);
		meeting.setActionCommand("addMeeting");
		meeting.setToolTipText ("Ajouter réunion");
		course.setBackground(Color.black);
		course.addActionListener(controller);
		course.setActionCommand("addCourse");
		course.setToolTipText ("Ajouter cours");
		rdv.setBackground(Color.black);
		rdv.addActionListener(controller);
		rdv.setActionCommand("addRdv");
		rdv.setToolTipText ("Ajouter rendez-vous");
		
	}
	
	//=======================================================================================initHomeDateChooser	
	public void initHomeDateChooser(){
		// mise en place du changement de date par fleche
		
		moveDate = new JPanel();
		
		main.add(moveDate, BorderLayout.NORTH);
		dateChoosen = new JLabel(dateChoosenLbl.split(" ")[1]);
		prev = new JButton(new ImageIcon("data/img/agenda/prev.png"));
		next = new JButton(new ImageIcon("data/img/agenda/next.png"));
		
		
		moveDate.setPreferredSize(new Dimension(0,25));
		moveDate.setLayout(new BorderLayout());
		moveDate.add(prev,BorderLayout.WEST);
		moveDate.add(dateChoosen,BorderLayout.CENTER);
		moveDate.add(next,BorderLayout.EAST);
		moveDate.setBackground(Color.black);
		
		prev.setBackground(Color.black);
		prev.addActionListener(controller);
		prev.setActionCommand("prevMonth");
		next.setBackground(Color.black);
		next.addActionListener(controller);
		next.setActionCommand("nextMonth");
		
		
		dateChoosen.setBackground(Color.black);
		dateChoosen.setForeground(Color.white);
		dateChoosen.setHorizontalAlignment(SwingConstants.CENTER);
		

	}
	
	//=======================================================================================initHomeDisplay
	private void initHomeDisplay(String type){
		display = new JPanel();
		main.add(display,BorderLayout.CENTER);
		display.setLayout(new BorderLayout());
		cal = new JPanel();
		activity = new JPanel();
		activity.setPreferredSize(new Dimension(0,80));
		activity.setBackground(Color.DARK_GRAY);
		activity.setForeground(Color.white);
		
		
		display.add(activity, BorderLayout.SOUTH);
		display.add(cal, BorderLayout.CENTER);
		if (type.equals("month")) {
			this.initCalendrierCentre();
		}else if (type.equals("week")){
			this.initWeekCentre();
		}
		main.repaint();
		main.validate();
	}
	
	//=======================================================================================launchAgendaView
	public void launchAgendaView() {
		panel.removeAll();
		initHome();
	}
	
	//=======================================================================================initEntrySelect	
	public void initEntrySelect(){
		activity.setLayout(new BorderLayout());
		JLabel day = new JLabel(dateChoosenLbl);
		entry = new JLabel(controller.getEvt(dateChoosenLbl.split(" ")[1]));
		entry.setForeground(Color.white);
		entry.setHorizontalAlignment(SwingConstants.CENTER);
		day.setHorizontalAlignment(SwingConstants.CENTER);
		day.setForeground(Color.white);
		activity.add(day, BorderLayout.NORTH);
		activity.setForeground(Color.white);
		activity.add(entry,BorderLayout.CENTER);
	}
	
	
//###########################################################################################
//							Gestion du calendrier
//###########################################################################################
	
	//=======================================================================================initCalendrierCentre
	public void initCalendrierCentre () {
		
		cal.setLayout (new GridLayout (7, 8));
		cal.setBackground (Color.black);

		JLabel[] joursSemaineLabel = new JLabel[8];
		
		//premiere ligne avec les jours
		for (int i = 0; i<8; i++) {
			joursSemaineLabel[i] = new JLabel("", JLabel.CENTER);
			joursSemaineLabel[i].setForeground (Color.white);
			cal.add (joursSemaineLabel[i]);
			
		}
		
		joursSemaineLabel[1].setText ("L");
		joursSemaineLabel[2].setText ("M");
		joursSemaineLabel[3].setText ("M");
		joursSemaineLabel[4].setText ("J");
		joursSemaineLabel[5].setText ("V");
		joursSemaineLabel[6].setText ("S");
		joursSemaineLabel[7].setText ("D");

		
		//ajout des lignes suivantes
		int j=0;
		jours = new JLabel[42];
		joursFond = new ImagePanel[42];
		sems = new JLabel[7];

		//tant que l'on a pas fini de parcourir le calendrier, on ajoute les boutons
		for (int i = 0; i<42; i++) {
			
			if ( (i%7)==0 && j<7) {
				sems[j] = new JLabel ();
				cal.add (sems[j]);
				j++;
			}
			joursFond[i]= new ImagePanel("data/img/agenda/day.png");
			joursFond[i].setLayout(new BorderLayout());
			
			jours[i] = new JLabel();
			Insets noMargin = new Insets (0, 0, 0, 0);
			// jours[i].setMargin (noMargin);//permet d'enlever la marge à l'intérieur des boutons
			joursFond[i].add(jours[i]);
			cal.add (joursFond[i]);
			
			
		}
		initCalendrierValue();
	}
	//=======================================================================================initWeekCentre
	public void initWeekCentre(){
		cal.setLayout (new GridLayout (7, 8));
		cal.setBackground (Color.black);

		JLabel[] joursSemaineLabel = new JLabel[8];
		JPanel[] joursSemainePanel = new JPanel[8];
		
		//premiere ligne avec les jours
		for (int i = 0; i<8; i++) {
			joursSemainePanel[i] = new JPanel();
			joursSemainePanel[i].setBackground(Color.black);
			
			joursSemaineLabel[i] = new JLabel("", JLabel.CENTER);
			joursSemaineLabel[i].setForeground (Color.white);
			
			joursSemainePanel[i].add (joursSemaineLabel[i]);
			cal.add (joursSemainePanel[i], JPanel.CENTER_ALIGNMENT);	
		}
		
		joursSemaineLabel[1].setText ("L");
		joursSemaineLabel[2].setText ("M");
		joursSemaineLabel[3].setText ("M");
		joursSemaineLabel[4].setText ("J");
		joursSemaineLabel[5].setText ("V");
		joursSemaineLabel[6].setText ("S");
		joursSemaineLabel[7].setText ("D");

		
		//ajout des lignes suivantes
		int j=0;
		JLabel[] jours = new JLabel[42];
		JLabel[] sems = new JLabel[6];

		//tant que l'on a pas fini de parcourir le calendrier, on ajoute les boutons
		for (int i = 0; i<42; i++) {
			if ( (i%7)==0 && j<6) {
				sems[j] = new JLabel ();
				cal.add (sems[j]);
				j++;
			}
			
			jours[i] = new JLabel ();
			Insets noMargin = new Insets (0, 0, 0, 0);
			// jours[i].setMargin (noMargin);//permet d'enlever la marge à l'intérieur des boutons
			cal.add (jours[i]);
			
		}
	}
	//=======================================================================================initCalendrierValue
	public void initCalendrierValue(){
		int year = Integer.parseInt(dateChoosenLbl.split("/")[2]);
		int month = Integer.parseInt(dateChoosenLbl.split("/")[1]);
		String today = dateChoosenLbl.split("/")[0];
		int day = 1;
		GregorianCalendar calendar = new GregorianCalendar(year,month-1,day);
		int firstDayMonth = calendar.get(Calendar.DAY_OF_WEEK);

		int numberOfWeek = calendar.get(Calendar.WEEK_OF_YEAR);
		// numberOfWeek = ( month == 1 && numberOfWeek == 52 )?1 :  numberOfWeek;
		int numberOfDayInMonth = (month == 1 || month == 3 || month == 5 || month ==7 || month == 8 || month == 10 || month == 12)?31:(month == 2 && calendar.isLeapYear(year))?29 : (month == 2 && !calendar.isLeapYear(year))?28:30;
	
	
	//mise en place numero des semaines
		int j = 0;
		
		for (int i=0 ; i <numberOfDayInMonth ; i++){
			if (i%7 == 0 && j<7){
				if (numberOfWeek+j > 52 && month == 1){
					numberOfWeek = 0;
				}else if (numberOfWeek+j >52 && month == 12){
					numberOfWeek = 1-j;
				}
				sems[j].setText(String.valueOf(numberOfWeek+j));
				sems[j].setForeground(Color.white);
				
				j++;
			}
		} 
		if (j==4 ){
			sems[j].setText(String.valueOf(numberOfWeek+j));
			sems[j].setForeground(Color.white);
		}else if (j == 5){
			sems[5].setText(String.valueOf(numberOfWeek+j));
			sems[5].setForeground(Color.white);
		}
		
	//mise en place des jours du mois et des ecouteurs
		int tmp = -1;
		for (int i = 0 ; i < numberOfDayInMonth;i++){
			
			switch ( firstDayMonth ) {
				case 1:
					tmp = 6;
				break;
				case 2:
					tmp = 0;
				break;
				case 3:
					tmp = 1;
				break;
				case 4:
					tmp = 2;
				break;
				case 5:
					tmp = 3;
				break;
				case 6:
					tmp = 4;
				break;
				case 7:
					tmp = 5;
				break;
				default:
				System.out.println("Erreur de jours ");
				break;
				
				
			}
			


			
			jours[i+tmp].setOpaque(false);
			joursFond[i+tmp].setBackground(Color.black);
			// jours[i+tmp].setIcon(new ImageIcon("data/img/agenda/day.png"));
			jours[i+tmp].setBackground(Color.white);
			jours[i+tmp].setForeground(Color.black);
			// jours[i+tmp].setBorder (BorderFactory.createLineBorder (Color.black));
			jours[i+tmp].setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
			jours[i+tmp].setText(String.valueOf(i+1));
		
			
			if (i+1 == Integer.parseInt(dateChoosenLbl.split("/")[0].split(" ")[1]) && month == Integer.parseInt(dateChoosenLbl.split("/")[1]) && year == Integer.parseInt(dateChoosenLbl.split("/")[2])){
			
				joursFond[i+tmp].setBackground(Color.black);
				joursFond[i+tmp].setImage("data/img/agenda/daySelect.png");
				
			}			
			if (controller.getEvt(i+1,month,year)){
				jours[i+tmp].setBackground(Color.red);
			}
			jours[i+tmp].addMouseListener(dayEvent);
			// jours[i+tmp].setActionCommand(String.valueOf(tmp)+" "+String.valueOf(i+1)+"/"+String.valueOf(month)+"/"+String.valueOf(year));
			if (i+1 == Integer.parseInt(aujourdhui.split("/")[0].split(" ")[1]) && month == Integer.parseInt(aujourdhui.split("/")[1]) && year == Integer.parseInt(aujourdhui.split("/")[2])){
				jours[i+tmp].setText("<html><u>"+String.valueOf(i+1)+"</u><html");
			}
		}
		
		
		
		// mise en place des jours du mois suivant
		for (int i = numberOfDayInMonth+tmp ; i <42 ; i++){
			jours[i].setText(String.valueOf(i-numberOfDayInMonth-tmp+1));
			joursFond[i].setBackground(Color.black);
			jours[i].setForeground(Color.LIGHT_GRAY);
			joursFond[i].setImage("data/img/agenda/noDay.png");
		}
		//desactivation des jours d moi précédant
		for (int k = 0 ; k < tmp ; k++){
			jours[k].setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		}
		//mise en place des jours du mois precedant
		int prevMonth = (Integer.parseInt(dateChoosenLbl.split("/")[1]) == 1)? 12: Integer.parseInt(dateChoosenLbl.split("/")[1])-1;
		int prevYear = (Integer.parseInt(dateChoosenLbl.split("/")[1]) == 1)? year-1: year;
		GregorianCalendar prevCal  = new GregorianCalendar(prevYear,prevMonth,1); 
		int prevMonthNumber = (prevMonth == 1 || prevMonth == 3 || prevMonth == 5 || prevMonth ==7 || prevMonth == 8 || prevMonth == 10 || prevMonth == 12)?31:(prevMonth == 2 && prevCal.isLeapYear(year))?29 : (prevMonth == 2 && !prevCal.isLeapYear(year))?28:30;
		int  l = 0;
		for (int i = tmp-1 ; i > -1 ; i--){
			jours[i].setText(String.valueOf(prevMonthNumber-l));
			joursFond[i].setBackground(Color.black);
			jours[i].setForeground(Color.LIGHT_GRAY);
			joursFond[i].setImage("data/img/agenda/noDay.png");
			l++;
		}
		//desactivation de jours du mois suivant
		for (int k = numberOfDayInMonth+tmp ; k < 42 ; k++){
			jours[k].setHorizontalAlignment(javax.swing.SwingConstants.CENTER);			
		}	
	}


//###########################################################################################
//							Gestion du menu
//###########################################################################################

	//=======================================================================================initMenu
	/**
	*permet d'afficher les options correspondantes a la  page d'ou le menu est appelé
	*
	*@param etat the page which call this method
	*/
	public void initMenu(String etat){
		//creation des instances d'objet nécessaire au menu option
		addAct = new JMenu("Nouvelle Activité");
		changeView = new JMenuItem("Changer de vue");
		save = new JMenuItem("Sauvegarder l'agenda");
		open = new JMenuItem("Charger un agenda");
		delete = new JMenu("Supprimer événement");
		searchDate = new JMenuItem("Chercher date");
		delAnEvt = new JMenuItem("Un");
		delPrevEvt = new JMenuItem("Anciens");
		delAllEvt = new JMenuItem("Tous");
		addCourse = new JMenuItem("Cours");
		addRdv = new JMenuItem("Rendez-vous");
		addMeeting = new JMenuItem("Rencontre");
		addActivity = new JMenuItem("Autre");
		
		//initialisation et paramétrage du menu
		optionPane = new JPopupMenu();
		optionPane.setPopupSize(new Dimension(160,160)); 
		optionPane.setBackground(Color.black);
		optionPane.setForeground(Color.white);
		
		//ajout des boutons prinsipaux dans le menu
		optionPane.add(addAct);
		optionPane.add(delete);
		optionPane.add(changeView);
		optionPane.add(searchDate);
		optionPane.add(save);
		optionPane.add(open);
		
		//ajout des sous menus dans les menu correspondants
		addAct.add(addCourse);
		addAct.add(addRdv);
		addAct.add(addMeeting);
		addAct.add(addActivity);
		delete.add(delAnEvt);
		delete.add(delPrevEvt);
		delete.add(delAllEvt);
		
		//mise en forme pour lisibilité - fond noir
		save.setBackground(Color.black);
		open.setBackground(Color.black);
		searchDate.setBackground(Color.black);
		delAllEvt.setBackground(Color.black);
		delAnEvt.setBackground(Color.black);
		delPrevEvt.setBackground(Color.black);
		addCourse.setBackground(Color.black);
		addRdv.setBackground(Color.black);
		addMeeting.setBackground(Color.black);	
		addActivity.setBackground(Color.black);	
		changeView.setBackground(Color.black);	
		
		//mise en forme pour lisibilité - texte en blanc
		delPrevEvt.setForeground(Color.white);
		delAllEvt.setForeground(Color.white);
		delAnEvt.setForeground(Color.white);
		open.setForeground(Color.white);
		delete.setForeground(Color.white);
		save.setForeground(Color.white);
		searchDate.setForeground(Color.white);
		addAct.setForeground(Color.white);
		addCourse.setForeground(Color.white);
		addRdv.setForeground(Color.white);
		addActivity.setForeground(Color.white);
		addMeeting.setForeground(Color.white);
		changeView.setForeground(Color.white);
		
		//ajout des evenements
		addMeeting.addActionListener(controller);
		addCourse.addActionListener(controller);
		addActivity.addActionListener(controller);
		addRdv.addActionListener(controller);

		addMeeting.setActionCommand("addMeeting");
		addCourse.setActionCommand("addCourse");
		addActivity.setActionCommand("addActivity");
		addRdv.setActionCommand("addRdv");

	}
	
	//=======================================================================================initOptionBar
	/**
		*This method display the toolbar with 2 buttons for options
		*
		*@param when String who indicate the calling method
		*/
	public void initOptionBar(String etat){
		//init des boutons 
		optionBar = new JPanel();
		option = new JButton("Options");
		retour = new JButton("Retour");
		//ajout du pannel avec bouton a l'affichage principal et configuration
		panel.add(optionBar, BorderLayout.SOUTH);
		optionBar.setPreferredSize (new Dimension (0, 27));
		optionBar.setLayout(new GridLayout(1,2));
		optionBar.setBackground(Color.black);
		
		//mise en place des bouton et ajout d'ecouteur
		optionBar.add(option);
		optionBar.add(retour);
		retour.setActionCommand("retour");
		option.setActionCommand(etat);
		
		if (etat == "home"){
			retour.setEnabled(false);
		}else{
			retour.setActionCommand("retour");
			option.setActionCommand("");
		}
		

		//effet de style pour les bouttons tout en bas
		retour.setHorizontalAlignment(SwingConstants.RIGHT);
		retour.setBackground(Color.black);
		retour.setForeground(Color.white);
		retour.addActionListener(controller);

		option.setHorizontalAlignment(SwingConstants.LEFT);
		option.setBackground(Color.black);
		option.setForeground(Color.white);
		option.addActionListener(controller);
		
		//init du menu qui correspond au boutton option
		this.initMenu(etat);
		
	}
	
	//##########################################################################################################
	//										Declaration des variables
	//##########################################################################################################
	private String dateChoosenLbl;
	private String typeDisplay = "month";
	public String aujourdhui;
	
	private JInternalFrame popupInfo;
	
	private Agenda controller;
	
	/** the pane owned by the application */
	private JPanel panel = new JPanel();
	
	//element de la bar d'option
	private JPanel optionBar;
	private JButton option;
	private JPopupMenu optionPane;
	private JButton retour ;
	
	// element qui peuvent totalement etre caché
	public JPanel main ;
	//init des boutton pour ajouter des evenements
	private JPanel taskBar ;
	private JButton rdv; 
	private JButton meeting;
	private JButton course ;
	
	
	//element de choix de mois
	private JPanel moveDate ;
	private JLabel dateChoosen ;
	private JButton prev ;
	private JButton next;	
	private JButton prevD;
	private JButton nextD;	
	
	
	
	//init affichage calendar && evt de la selection
	private JPanel display ;
	private JPanel cal;
	private JPanel activity ;
	private JLabel entry ;
	
	//element du menu
	private JMenu addAct ; 
	private JMenuItem changeView  ;
	private JMenuItem save  ;
	private JMenuItem open  ;
	private JMenu delete	 ;
	private JMenuItem searchDate ; 
	private JMenuItem delAnEvt  ;
	private JMenuItem delPrevEvt ;
	private JMenuItem delAllEvt  ;
	private JMenuItem addCourse  ;
	private JMenuItem addRdv  ;
	private JMenuItem addMeeting ;
	private JMenuItem addActivity ;

	//panel d'evenement de base
	private JPanel panelAct;
	private JPanel textPane;
	private JLabel typeActivityLbl;
	private JTextArea motif ;
	private LimitedTextField debH ;
	private LimitedTextField debM ;
	private LimitedTextField finH ;
	private LimitedTextField finM ;
	private JButton cancel ;
	private JButton validate;
	private JCheckBox semaine;
	private JCheckBox jour;
	private JTextField lieu;
		//panel cours
		private JTextField prof;
		private JTextField mati;
		//panel rdv
		private JTextField list;
		//panel meeting
		private JTextField init ;
		private JTextField invi ;//peut etre choisi dans une liste
		private JButton details;
			//details
			private JTextField site;
			private JTextField duree;
			
	
	private ClickDay dayEvent;
	private JLabel[] jours;
	private ImagePanel[] joursFond;
	private JLabel[] sems;
	private String[] dayName = {"","Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
	//##########################################################################################################
	//										Methodes get / set
	//##########################################################################################################

	public JPopupMenu getMenu () { return optionPane ; }
	public JButton getOptions () { return option ; }
	public JPanel getPanel() {return panel; } 
	public void setDateChoosenLbl(String day, String month, String year){
		String dayLabel = dayName[ new GregorianCalendar(Integer.parseInt(year),Integer.parseInt(month)-1,Integer.parseInt(day)).get(Calendar.DAY_OF_WEEK)];
		dateChoosenLbl = dayLabel+" "+day+"/"+month+"/"+year ;
	}
	
	public String getDateChoosenLbl() {return dateChoosenLbl;}
	public String getMotif(){ return motif.getText(); }
	public String getHeureD(){ return debH.getText(); }
	public String getMinuteD(){ return debM.getText(); }
	public String getHeureF(){ return finH.getText(); }
	public String getMinuteF(){ return finM.getText(); }
	public int getRepetition(){ 
		int ret = 0;
		ret = (jour.isSelected()) ? 1 : 0 ;
		ret += (semaine.isSelected()) ? 2 : 0 ; 
		return ret;
	}
	public String getLieu(){ return lieu.getText(); }
	public String getProf(){ return prof.getText(); }
	public String getMatiere(){ return mati.getText(); }
	public String getInitiateur(){ return init.getText(); }
	public String getInivite(){ return invi.getText(); }
	public String getListe(){ return list.getText(); }

	
	//##########################################################################################################
	//										Constructeur
	//##########################################################################################################
	/**
	*  The AgendaView constructor which initialize the controller, and the special listener for the main calendar
	*
	* @param ancontroller the that is transmitted by the controller
	*/
	public AgendaView(Agenda controller) {

		
		this.controller = controller;
		String date = (Integer.parseInt(new SimpleDateFormat("dd").format(new Date())) < 10)? new SimpleDateFormat("EEEEEEEE d/MM/yyyy").format(new Date()): new SimpleDateFormat("EEEEEEEE dd/MM/yyyy").format(new Date());
		dateChoosenLbl = ((String.valueOf(date.charAt(0))).toUpperCase())+ date.substring(1);
		dayEvent = new ClickDay(this);
		aujourdhui =  ((String.valueOf(date.charAt(0))).toUpperCase())+ date.substring(1);

	}
	
	
	//##########################################################################################################
	//								redefinition de classe pour une ihm adapter 
	//##########################################################################################################


	class LimitedTextField extends JTextField {
	 
		private static final long serialVersionUID = 42L;
		
		public LimitedTextField(int maxLength){
			super(maxLength);
			AbstractDocument doc = (AbstractDocument) getDocument();
			doc.setDocumentFilter(new TextLimiter(maxLength));
		}
	 

	class TextLimiter extends DocumentFilter {
		private int max;
				 
			public TextLimiter(int max) {
				this.max = max;
			}
			 
			public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException { 
				replace(fb, offset, 0, str, attr);
			}
			 
			public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
				int newLength = fb.getDocument().getLength() - length + str.length();
				if (newLength <= max) {
					fb.replace(offset, length, str, attrs);
				} else {
					Toolkit.getDefaultToolkit().beep();
				}
			}
		}
	
	}

	class SortedModel extends DefaultListModel	{
		private static final long serialVersionUID = 42L;
		public SortedModel(){
			super();
		}
  
		public void addElement(Object element){
			int index = 0;
			int size = getSize();
 
			//  recherche ou ajouter le nouvel utilisateur
 
			for (index = 0; index < size; index++)
			{
				if (getElementAt( index ).toString().compareTo(element.toString()) > 0)
					break;
			}
 
			super.add(index,element);
		}
 
	}

	class ImagePanel extends JPanel {
		public Image _image;
		private static final long serialVersionUID = 42L;
	 
		public ImagePanel(String image) {
			_image = Toolkit.getDefaultToolkit().getImage(image);
		}
	 
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawImage(_image,0,0, getWidth(), getHeight(), this);
		}
		public void setImage(String image){
			_image = Toolkit.getDefaultToolkit().getImage(image);
			repaint();
			validate();
		}
	}
}